home *** CD-ROM | disk | FTP | other *** search
- *///////*///////*///////*///////*///////*///////*///////*///////
- *
- * SYS_SPIC.HAS v1.5 BY 鳳 幽玄 1995
- *
- **///////*///////*///////*///////*///////*///////*///////*///////
- * 注意:
- *
- * ・HAS V3.0 以上でアセンブルしてください。
- *
- * ・_Fpic_disp:展開先がグラフィックRAMなどの場合は、
- * スーパーバイザ・モードにしてからコールしてください。
- * また、画面モードも自前で設定してください。
- *
- * ・_Fpic_disp は、スタックワーク1Kbyte強 使用します。
- *
- *///////*///////*///////*///////*///////*///////*///////*///////
-
- include iocscall.mac
- include doscall.mac
- include sys_fpic.mac
-
- .xdef _Fpic_load
- .xdef _Fpic_keep
- .xdef _Fpic_disp
- .xdef _Fpic_free
- .xdef _Fpic_set_buf
-
- .text
-
- *///////*///////*///////*///////*///////*///////*///////
- * 一括処理する
- *///////*///////*///////*///////*///////*///////*///////
- * int Fpic_load(FileNamePtr,x,y)
- * ret:d0.l = 0 普通に終了
- * -1 読めなかった
- * -2 未対応データ
- * -3 メモリ不足
- *///////*///////*///////*///////*///////*///////*///////
- _Fpic_load: movem.l d1-d2/a0,-(sp)
-
- movea.l 4*4(sp),a0 *a0.l = File name
- move.l 4*5(sp),d1 *d1.l = X
- move.l 4*6(sp),d2 *d2.l = Y
-
- pea (a0) *┐メモリに読み込む
- bsr _Fpic_keep *│
- addq.w #4,sp *│
- tst.l d0 *│
- bmi 9f *│
- movea.l d0,a0 *┘
-
- move.l d2,-(sp) *┐読み込んだのを表示
- move.l d1,-(sp) *│
- pea (a0) *│
- bsr _Fpic_disp *│
- lea 12(sp),sp *┘
-
- pea (a0) *┐メモリ解放
- bsr _Fpic_free *│
- addq.w #4,sp *┘
-
- moveq.l #0,d0 * 無事おわり
-
- 9: movem.l (sp)+,d1-d2/a0
- rts
-
- *///////*///////*///////*///////*///////*///////*///////
- * メモリを確保してデータを読み込む
- *///////*///////*///////*///////*///////*///////*///////
- * int Fpic_keep(FileNamePtr)
- * ret:d0.l = BufPtr
- * -1 読めなかった
- * -2 未対応データ(.PIC 形式ではない)
- * -3 メモリ不足
- * -4 未対応データ(32768/65536 色 .PIC でない)
- *///////*///////*///////*///////*///////*///////*///////
-
- pmd_tbl: dc.b $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
- dc.b $ff,$ff,$ff,$ff,$ff,$ff,$02,$03
-
- _Fpic_keep: movem.l d1-d7/a0-a6,-(sp)
-
- move.l 4*15(sp),a0 * a0.l = ファイル名へのポインタ
-
- clr.w -(sp) *┐ファイルオープン
- pea (a0) *│
- DOS _OPEN *│
- addq.l #6,sp *│
- move.l d0,d1 *│
- bmi 9f *┘
-
- move.w d1,-(sp) *┐ちゃんと'PIC'データですか?
- DOS _FGETC *│
- cmpi.b #'P',d0 *│
- bne 8f *│
- DOS _FGETC *│
- cmpi.b #'I',d0 *│
- bne 8f *│
- DOS _FGETC *│
- cmpi.b #'C',d0 *│
- bne 8f *┘
-
- moveq.l #0,d6 *d6.l = X<<16 + Y
- move.l #$00_00_08_00,d7 *d7.l = flag1_flag2_SCR_PICT
- bsr comment_chk *
-
- @@: DOS _FGETC *┐0飛ばし
- tst.b d0 *│
- bne @b *┘
-
- DOS _FGETC *┐$0000?
- tst.b d0 *│
- bne 8f *│
- DOS _FGETC *│
- tst.b d0 *│
- bne 8f *┘
-
- DOS _FGETC *┐使用色bit数
- move.b d0,d3 *│
- lsl.w #8,d3 *│
- DOS _FGETC *│
- move.b d0,d3 *┘
- subq.w #1,d3 *┐使用色bit数/$0001~$0010
- cmpi.w #16,d3 *│ を
- bcc 6f *│PIC・TYPEに変換
- move.b pmd_tbl(pc,d3.w),d3 *│
- bmi 6f *│ 02:32768色
- or.w d3,d7 *┘ 03:65536色
-
- moveq.l #0,d5 *┐サイズ
- moveq.l #4-1,d3 *│
- 1: lsl.l #8,d5 *│
- DOS _FGETC *│
- move.b d0,d5 *│
- dbra d3,1b *┘d5.l = sizeX<<16 + sizeY
-
- move.l d0,d3 *┐
- swap d3 *│横size check
- cmpi.w #512,d3 *│
- bhi 8f *┘
- cmpi.w #512,d5 *┐縦size check
- bhi 8f *┘
-
- move.w #1,-(sp) *┐現在のポインタ位置
- clr.l -(sp) *│
- move.w d1,-(sp) *│
- DOS _SEEK *│
- add.w #8,sp *│
- move.l d0,d2 *┘
-
- move.w #2,-(sp) *┐全サイズを調べる
- clr.l -(sp) *│
- move.w d1,-(sp) *│
- DOS _SEEK *│
- add.w #8,sp *│
- move.l d0,d3 *┘
- sub.l d2,d3 *d3.l = 圧縮データ部のサイズ
-
- clr.w -(sp) *┐ポインタを頭に戻す
- move.l d2,-(sp) *│
- move.w d1,-(sp) *│
- DOS _SEEK *│
- add.w #8,sp *┘
-
- move.l #fpw_size,d2 *┐ヘッダサイズ
- addq.l #4,d2 *┘ヘッダサイズ+念のための4バイト
-
- move.l d3,-(sp) *┐メモリ確保
- add.l d2,(sp) *│ヘッダ分多めに取る
- DOS _MALLOC *│
- addq.w #4,sp *│
- move.l d0,a0 *│a0.l = データのアドレス
- tst.l d0 *│
- bmi 7f *┘
-
- move.l d3,-(sp) *┐圧縮データ部読み込み
- pea fpw_size(a0) *│
- move.w d1,-(sp) *│
- DOS _READ *│
- lea 10(sp),sp *┘
-
- * add.l d3,d2 *┐念のために取った4バイトをクリア
- * clr.l -4(a0,d2.l) *┘
-
- move.l d7,fpw_FLAG1(a0) *
- move.l d6,fpw_X(a0) *
- move.l d5,fpw_H(a0) *
- clr.l fpw_rsv(a0) *
-
- DOS _CLOSE *┐ファイルクローズ
- addq.w #2,sp *┘
-
- move.l a0,d0 *普通に終了
-
- @@: movem.l (sp)+,d1-d7/a0-a6
- rts
-
- 9: moveq.l #-1,d0 *┐-1 = 読み込みエラー
- bra @b *│
- *│
- 8: DOS _CLOSE *│
- addq.w #2,sp *│
- moveq.l #-2,d0 *│-2 = 対応してないデータ。
- bra @b *│(.PIC ではない)
- *│
- 7: DOS _CLOSE *│
- addq.w #2,sp *│
- moveq.l #-3,d0 *│-3 = メモリ不足
- bra @b *│
- *│
- 6: DOS _CLOSE *│
- addq.w #2,sp *│
- moveq.l #-4,d0 *│-4 = 対応してないデータ。
- bra @b *┘(32768/65536 色 .PIC でない)
-
- *- - - -*- - - -*- - - -*- - - -*- - - -*- - - -*- - - -
- * MFGED 拡張フォーマット対応のコメント飛ばし
- *- - - -*- - - -*- - - -*- - - -*- - - -*- - - -*- - - -
- comment_chk: move.w d1,-(sp) *File Hundle
-
- move.l #'/MM/',d2 *┐
- moveq.l #4-1,d3 *│
- 1: rol.l #8,d2 *│
- DOS _FGETC *│/MM/ check
- cmpi.b #$1a,d0 *│
- beq 9f *│
- cmp.b d2,d0 *│
- bne 8f *│
- dbra d3,1b *┘
-
- chk_sw: DOS _FGETC *┐
- cmpi.b #'M',d0 *│頭check
- beq MM_M *│
- cmpi.b #'X',d0 *│
- beq MM_X *│
- cmpi.b #':',d0 *│
- beq 8f *┘
-
- skip_sl: DOS _FGETC *┐スイッチスキップ&NEXT
- cmpi.b #'/',d0 *│
- * bne 8b *│by Mitsuky
- bne skip_sl *│
- bra chk_sw *┘
-
- 8: DOS _FGETC *┐通常のコメントすきっぷ
- cmpi.b #$1a,d0 *│
- bne 8b *┘
-
- 9: addq.w #2,sp
- rts
-
- MM_M: DOS _FGETC
- cmpi.b #'K',d0
- beq MM_MK
- cmpi.b #'Y',d0
- beq MM_MY
- cmpi.b #'S',d0
- beq MM_MS
- cmpi.b #'H',d0
- bne skip_sl
- cmpi.b #'Y',d0
- beq MM_MY
-
- MM_MHY: bset.l #24+fpf_MHY,d7
- bra skip_sl
-
- MM_MK: bset.l #24+fpf_MK,d7
- bra skip_sl
-
- MM_MY: bset.l #24+fpf_MY,d7
- bra skip_sl
-
- MM_MS: bset.l #24+fpf_SCR,d7
- DOS _FGETC
- andi.w #$00ff,d0
- cmpi.b #'A',d0
- bcs 1f
- subi.b #'A'-'0',d0
- 1: subi.b #'0',d0
- lsl.w #8,d0
- or.w d0,d7
- bra skip_sl
-
- MM_X: DOS _FGETC
- cmpi.b #'Y',d0
- beq MM_XY
- cmpi.b #'S',d0
- beq MM_XS
- cmpi.b #'F',d0
- beq skip_sl
-
- MM_XF: DOS _FGETC
- cmpi.b #'L',d0
- bne skip_sl
- bset.l #24+fpf_RS,d7
- bra skip_sl
-
- MM_XS: DOS _FGETC
- cmpi.b #'S',d0
- bne skip_sl
- bset.l #24+fpf_SQ,d7
- bra skip_sl
-
- MM_XY: bset.l #24+fpf_XY,d7
- moveq.l #0,d3
- moveq.l #0,d6
-
- moveq.l #4-1,d2
- 1: mulu #10,d6
- DOS _FGETC
- andi.w #$00ff,d0
- subi.b #'0',d0
- add.w d0,d6
- dbra d2,1b
- swap d6
-
- moveq.l #4-1,d2
- 1: mulu #10,d3
- DOS _FGETC
- andi.w #$00ff,d0
- subi.b #'0',d0
- add.w d0,d3
- dbra d2,1b
- move.w d3,d6
- bra skip_sl
-
- *///////*///////*///////*///////*///////*///////*///////
- * データを破棄する
- *///////*///////*///////*///////*///////*///////*///////
- * int Fpic_free(BufPtr)
- * ret:d0.l = 0 正常終了
- * -1 エラー
- *///////*///////*///////*///////*///////*///////*///////
- *_Fpic_free: move.l 4*1(sp),-(sp) *┐
- * pea (a4) *│解放するだけ
- * DOS _MFREE *│
- * addq.w #8,sp *│
-
- _Fpic_free: move.l 4*1(sp),-(sp) *┐by Mitsuky
- DOS _MFREE *│解放するだけ
- addq.w #4,sp *│
- tst.l d0 *│
- bmi 8f *┘
- 9: rts
- 8: moveq.l #-1,d0 *┐まあ、念のためのエラー
- bra 9b *┘
-
- *///////*///////*///////*///////*///////*///////*///////
- * 展開先アドレスの指定
- *///////*///////*///////*///////*///////*///////*///////
- * void Fpic_free(BufPtr)
- *///////*///////*///////*///////*///////*///////*///////
- _Fpic_set_buf: move.l a0,-(sp) *┐設定するだけ
- lea buf_address(pc),a0 *│
- move.l 8(sp),(a0) *│
- movea.l (sp)+,a0 *┘
- rts
-
- *///////*///////*///////*///////*///////*///////*///////
- * 表示する
- *///////*///////*///////*///////*///////*///////*///////
- * int Fpic_disp(BufPtr,x,y)
- * ret:d0.l = 0 正常終了
- * -1 エラー(今のところありえない)
- *///////*///////*///////*///////*///////*///////*///////
- .offset 0
- PR_BUF: ds.b 1024 *1024 キャッシュバッファ
- PIC_TYP: ds.w 1 *2 PICの色数モード#
- PSIZE_X: ds.w 1 *2 横サイズ
- PSIZE_Y: ds.w 1 *2 縦サイズ
- DOWNOFS: ds.w 1 *2 1段下へ下がる時のアドレス増加分
- VRAMADR: ds.l 1 *4 左上アドレス
- WORK_SZ: ds.l 1 * <a6>
- ds.l 1 * <return adr.>
- DATA_BUF: ds.l 1 * メモリ上のPICデータのポインタ
- ds.w 1 *
- LOC_X: ds.w 1 * 表示座標X
- ds.w 1 *
- LOC_Y: ds.w 1 * 表示座標Y
- .text
-
- buf_address: dc.l $c00000
- *- - - -*- - - -*- - - -*- - - -*- - - -*- - - -*- - - -
- _Fpic_disp: link a6,#-WORK_SZ
- movem.l d1-d7/a0-a6,-(sp)
- lea -WORK_SZ(a6),a6 *(変なことをやってるようだけど許して)
-
- movea.l DATA_BUF(a6),a4 *DATA ADDRESS
-
- clr.w PIC_TYP(a6) *┐PIC・TYPE
- move.b fpw_PICT(a4),PIC_TYP+1(a6) *┘
- move.w fpw_H(a4),PSIZE_X(a6) *SIZE_X
- move.w fpw_V(a4),PSIZE_Y(a6) *SIZE_Y
- lea fpw_size(a4),a4 *
-
- move.w LOC_X(a6),d0 *┐左上アドレスを求める
- add.w d0,d0 *│
- move.w LOC_Y(a6),d1 *│
- mulu #1024,d1 *│
- add.w d0,d1 *│
- add.l buf_address(pc),d1 *│
- move.l d1,VRAMADR(a6) *┘
-
- move.w #512,d0 *┐下段左への増加分を求める
- sub.w PSIZE_X(a6),d0 *│
- add.w d0,d0 *│
- move.w d0,DOWNOFS(a6) *┘
-
- bsr screen_init *
- bsr cache_init *
- bsr PicX *
-
- moveq.l #0,d0 *
- movem.l (sp)+,d1-d7/a0-a6
- unlk a6
- rts
-
- *- - - -*- - - -*- - - -*- - - -*- - - -*- - - -*- - - -
- * 展開バッファをクリア
- *- - - -*- - - -*- - - -*- - - -*- - - -*- - - -*- - - -
- screen_init: movem.l d0-d7/a0-a4,-(sp)
-
- move.l VRAMADR(a6),a1 *┐
- move.w PSIZE_Y(a6),d0 *│
- subq.w #1,d0 *│
- mulu #1024,d0 *│
- move.w PSIZE_X(a6),d1 *│
- add.w d1,a1 *│
- add.w d1,d0 *│
- add.l d0,a1 *┘a1.l = 描き始めアドレス
-
- move.w PSIZE_X(a6),d0 *┐
- subq.w #1,d0 *│*左端の分を引く
- move.w d0,d1 *│
- andi.w #15,d1 *│
- neg.w d1 *│
- add.w #15,d1 *│
- add.w d1,d1 *│
- lea jp_1(pc,d1.w),a2 *│a2.l = ジャンプ先
- lsr.w #4,d0 *│
- neg.w d0 *│
- add.w #32,d0 *│
- add.w d0,d0 *│
- add.w d0,d0 *│
- lea jp_16(pc,d0.w),a3 *┘a3.l = ジャンプ先
-
- move.w DOWNOFS(a6),d0 * 書き込みデータ左端
- neg.w d0 *
- moveq.l #$0000_0000,d1 *┐書き込みデータ
- move.l d1,d2 *│
- move.l d1,d3 *│
- move.l d1,d4 *│
- move.l d1,d5 *│
- move.l d1,d6 *│
- move.l d1,a0 *│
- move.l d1,a4 *┘
-
- move.w PSIZE_Y(a6),d7 *┐縦繰り返し数
- subq.w #1,d7 *┘
-
- @@: jmp (a2) *┐塗りつぶし
- jp_1: .rept 15 *│
- move.w d1,-(a1) *│
- .endm *│
- jmp (a3) *│
- jp_16: .rept 32 *│
- movem.l d1-d6/a0/a4,-(a1) *│
- .endm *│
- move.w d0,-(a1) *│
- adda.w d0,a1 *│
- dbra d7,@b *┘
-
- movem.l (sp)+,d0-d7/a0-a4
- rts
-
- *- - - -*- - - -*- - - -*- - - -*- - - -*- - - -*- - - -
- * キャッシュ用ワーク初期化
- *- - - -*- - - -*- - - -*- - - -*- - - -*- - - -*- - - -
- cache_init: movem.l d0-d3/a0,-(sp)
-
- lea PR_BUF(a6),a0
- moveq.l #8,d1
- move.w #1016,d2
- move.w #1023,d3
- moveq.l #128-1,d0
-
- 1: clr.w (a0)+ *
-
- move.w d1,(a0)+ *next
- addq.w #8,d1 *
- and.w d3,d1 *
-
- move.w d2,(a0)+ *before
- addq.w #8,d2 *
- and.w d3,d2 *
-
- addq.w #2,a0 *dummy
-
- dbra d0,1b
-
- movem.l (sp)+,d0-d3/a0
- rts
-
- *- - - -*- - - -*- - - -*- - - -*- - - -*- - - -*- - - -
- * PIC展開
- *- - - -*- - - -*- - - -*- - - -*- - - -*- - - -*- - - -
- B_TEST .macro *┐マクロ:1ビットテスト
- .local BT_00 *│
- dbra d7,BT_00 *│
- moveq.l #15,d7 *│
- swap d6 *一応必要な場合がある
- move.w (a4)+,d6 *│
- BT_00: btst.l d7,d6 *│
- .endm *┘
-
- B_READ .macro bitn,reg *┐マクロ:複数ビット読み込み
- .local BR_00 *│
- sub.w bitn,d7 *│
- bcc.s BR_00 *│
- add.w a1,d7 *│
- swap d6 *│
- move.w (a4)+,d6 *│
- BR_00: move.l d6,reg *│
- lsr.l d7,reg *│
- .endm *┘
-
- B_FB .macro bitn *┐マクロ:読まなかったことにする
- addq.w #bitn,d7 *│
- .endm *┘
-
- SET_NM3 .macro *┐マクロ:数値設定(^_^;
- addq.w #1,d4 *│
- sub.l d3,d4 *│
- bcc PicX_05 *│
- add.l d3,d4 *│
- bra PicX_10 *┘
- .endm
-
- UpC = -1024+2
- UpL1 = -1024-2+2
- UpR1 = -1024+2+2
- UpL2 = -1024-4+2
- UpR2 = -1024+4+2
-
- *- - - -*- - - -*- - - -*- - - -*- - - -*- - - -*- - - -
- PJ: dc.w PALsel_16-PJ *┐色数モード毎のジャンプ先オフセット
- dc.w PALsel_256-PJ *│
- dc.w PALsel32768-PJ *│
- dc.w PALsel65536-PJ *┘
-
- *- - - -*- - - -*- - - -*- - - -*- - - -*- - - -*- - - -
- PicX: move.w PIC_TYP(a6),d0 *┐
- add.w d0,d0 *│a5 = パレット取得の処理アドレス
- move.w PJ(pc,d0.w),d0 *│
- lea PJ(pc,d0.w),a5 *┘
-
- movea.l VRAMADR(a6),a0 * a0.l = VRAMポインタ
-
- suba.l a3,a3 * a3.l = キャシュ用
-
- moveq.l #0,d7 * d7.l = ビットカウンタ
-
- movea.w #16,a1 * a1.l = #16の代わり
-
- moveq.l #0,d4 *┐
- move.w PSIZE_X(a6),d4 *│d4.l = 横サイズカウンタ
- subq.w #1,d4 *┘
-
- move.w #UpC,d5 *
- move.l #UpL1,d2 *
- move.l #UpR1,d1 *
-
- *- - - -*- - - -*- - - -*- - - -*- - - -*- - - -*- - - -
- * 次の変化点までの距離を求める。
- *- - - -*- - - -*- - - -*- - - -*- - - -*- - - -*- - - -
- Wyle: moveq.l #0,d0 *┐
- @@: addq.w #1,d0 *│ビット数カウント
- B_TEST *│
- bne @b *┘
-
- moveq.l #1,d3 *┐
- lsl.l d0,d3 *│なんとコメントしてよいやら
- subq.l #1,d3 *┘
-
- cmpi.w #17,d0 *┐何ビット?
- bcc 1f *┘
-
- B_READ d0,d0 *┐
- and.l d3,d0 *│ワードで読む
- add.l d0,d3 *│
- SET_NM3 *┘
-
- 1: move.l d1,-(sp) *
- sub.w a1,d0 *┐
- B_READ d0,d1 *│ロングワードで読む
- B_READ a1,d0 *│
- swap d1 *│
- move.w d0,d1 *│
- and.l d3,d1 *│
- add.l d1,d3 *│
- move.l (sp)+,d1 *
- SET_NM3 *┘
-
- *- - - -*- - - -*- - - -*- - - -*- - - -*- - - -*- - - -
- * 折り返し付き横塗り
- *- - - -*- - - -*- - - -*- - - -*- - - -*- - - -*- - - -
- PicX_10: sub.l d4,d3 *
-
- bra 2f *
- 1: move.w (a0),d0 *│2(8)
- move.w -2(a0,d0.w),(a0)+ *│4(18)
- 2: dbra d4,1b
-
- adda.w DOWNOFS(a6),a0 *┐1段下がる
- moveq.l #0,d4 *│
- move.w PSIZE_X(a6),d4 *│
- subq.w #1,PSIZE_Y(a6) *│
- beq PicX_ex *│
- cmp.l d3,d4 *│
- bcs PicX_10 *│
- sub.l d3,d4 *┘
-
- *- - - -*- - - -*- - - -*- - - -*- - - -*- - - -*- - - -
- PicX_05: subq.w #1,d3
- bcs PicX_04
-
- bra 2f *
- 1: move.w (a0),d0 *│2(8)
- move.w -2(a0,d0.w),(a0)+ *│4(18)
- 2: dbra d3,1b
-
- PicX_04: jmp (a5) *パレット取得へ
-
- *- - - -*- - - -*- - - -*- - - -*- - - -*- - - -*- - - -
- * パレット取得
- *- - - -*- - - -*- - - -*- - - -*- - - -*- - - -*- - - -
- PALsel_16:
-
- *- - - -*- - - -*- - - -*- - - -*- - - -*- - - -*- - - -
- PALsel_256:
-
- *- - - -*- - - -*- - - -*- - - -*- - - -*- - - -*- - - -
- PALsel65536: B_READ a1,d0 *16ビット読み込む
-
- move.w d0,d0 *頭が1なら、テーブル番号
- bmi READfromTBL *頭が0なら、色コード
-
- add.w d0,d0 *新たに1ビット読み込んで
- B_TEST *65536色データにする
- beq @f *
- addq.w #1,d0 *
-
- @@: move.w PR_BUF+2(a6,a3.w),a3 *┐テーブルにセットする
- move.w d0,PR_BUF(a6,a3.w) *│
- bra chain *┘
-
- *- - - -*- - - -*- - - -*- - - -*- - - -*- - - -*- - - -
- PALsel32768: B_READ a1,d0 *16ビット読み込む
-
- move.w d0,d0 *頭が1なら、テーブル番号
- bpl SETtoTBL *頭が0なら、色コード
-
- *- - - -*- - - -*- - - -*- - - -*- - - -*- - - -*- - - -
- READfromTBL: lsr.w #5,d0 *┐
- andi.w #127*8,d0 *┘d0.w = テーブル番号x8
-
- cmp.w a3,d0 *
- beq @f *
-
- move.l PR_BUF+2(a6,d0.w),d3 *18 計122クロック
- move.w d3,a2 *04
- swap d3 *04
- move.w d3,PR_BUF+2(a6,a2.w) *14
- move.w a2,PR_BUF+4(a6,d3.w) *14
- move.w PR_BUF+2(a6,a3.w),d3 *14
- move.w d0,PR_BUF+2(a6,a3.w) *14
- move.w d0,PR_BUF+4(a6,d3.w) *14
- swap d3 *04
- move.w a3,d3 *04
- move.l d3,PR_BUF+2(a6,d0.w) *18
-
- move.w d0,a3
-
- @@: move.w PR_BUF(a6,d0.w),d0 *1ドット書き込み
-
- B_FB 8
- bra chain
-
- *- - - -*- - - -*- - - -*- - - -*- - - -*- - - -*- - - -
- SETtoTBL: add.w d0,d0 *┐
- move.w PR_BUF+2(a6,a3.w),a3 *│テーブルにセットする
- move.w d0,PR_BUF(a6,a3.w) *┘
-
- *- - - -*- - - -*- - - -*- - - -*- - - -*- - - -*- - - -
- * 連鎖処理
- *- - - -*- - - -*- - - -*- - - -*- - - -*- - - -*- - - -
- chain: lea (a0),a2 *
- move.w d0,(a0)+ * 1ドット描き込み
-
- B_TEST *┐連鎖の有無
- dbne d4,Wyle *┘
- beq.s chain_ex *┘
-
- chain_next: B_TEST *x
- bne C_1x
- B_TEST *0x
- bne C_01
- B_TEST *00x
- dbne d4,Wyle
- beq.s chain_ex
-
- B_TEST *001x
- bne 1f
-
- lea 1024-4(a2),a2
- move.w #UpR2,(a2) *0010:L2
- bra chain_next
-
- 1: lea 1024+4(a2),a2
- move.w #UpL2,(a2) *0011:R2
- bra chain_next
-
- C_01: lea 1024-2(a2),a2
- move.w d1,(a2) *01:L1
- bra chain_next
-
- C_1x: B_TEST *1x
- bne 1f
-
- lea 1024(a2),a2
- move.w d5,(a2) *10:C
- bra chain_next
-
- 1: lea 1024+2(a2),a2
- move.w d2,(a2) *11:R1
- bra chain_next
-
- chain_ex: adda.w DOWNOFS(a6),a0 *┐連鎖と横ループを抜けたあと
- moveq.l #0,d4 *│
- move.w PSIZE_X(a6),d4 *│
- subq.w #1,d4 *│
- subq.w #1,PSIZE_Y(a6) *│
- bne Wyle *│
- PicX_ex: rts *┘